package com.it.entity;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
import java.util.List;

/**
 * 用户实体类
 */
@JsonIgnoreProperties(value = "handler")
@Data
@TableName("gm_user")
public class User implements Serializable {
    /**
     * 自增长主键
     */
    @TableId(value = "id", type = IdType.UUID)
    private String id;
    /**
     * 账号
     */
    private String userName;
    /**
     * 登录时的密码，不持久化到数据库
     */
    @TableField(exist = false)
    private String plainPassword;
    /**
     * 加密后的密码
     */
    private String password;
    /**
     * 用于加密的盐
     */
    private String salt;
    /**
     * 联系方式
     */

    @NotEmpty(message = "请输入手机号码！！！")
    @Length(min = 11, max = 11, message = "手机号码长度不对")
    @Pattern(regexp = "((^[1][3,4,5,6,7,8,9][0-9]{9}$))", message = "手机格式不匹配")
    private String phoneNum;
    /**
     * 邮箱
     */
    @Email(message = "email 格式不正确")
    private String email;
    /**
     * 用户注册时间
     */
    private String birthDate;
    /**
     * 用户最后一次登录时间
     */
    private String updatedDate;
    /**
     * 用户角色id
     */
    private String roleId;
    /**
     * 用户角色名称
     */
    @TableField(exist = false)
    private String roleName;
    /**
     * 用户状态，0表示用户已删除
     */
//    private Integer status;
    /**
     * 昵称/姓名
     */
    private String realName;
    /**
     * 联系地址
     */
    private String address;
    /**
     * 性别
     */
    private String sex;
    /**
     * 用户头像
     */
    private String imgUrl;
    //积分
    private int integral;
    //剩余抽奖次数
    private int residueDegree;
    //开始时间
    @TableField(exist = false)
    private String start_time;
    //结束时间
    @TableField(exist = false)
    private String end_time;
    //排序方式
    @TableField(exist = false)
    private String sortType;
    private String type;
    @TableField(exist = false)
    private List<Hobby> hobbies;
    //广泛爱好者的爱好计数
    @TableField(exist = false)
    private Integer hobbiesCount;
    //本月获得总分
    @TableField(exist = false)
    private Integer integralTheMonth;
    //3天内花的积分
    @TableField(exist = false)
    private String sumShoppingIntegral;
    //3天内抽奖次数
    @TableField(exist = false)
    private String getIntegralCount;
    //3天内获得的积分
    @TableField(exist = false)
    private String sumIntegral;
}